package youleche.com.common.asynchronous;

import com.googlecode.asyn4j.core.callback.AsynCallBack;
import com.googlecode.asyn4j.core.handler.AsynServiceHandler;
import com.googlecode.asyn4j.core.handler.CacheAsynWorkHandler;
import com.googlecode.asyn4j.core.handler.DefaultErrorAsynWorkHandler;
import com.googlecode.asyn4j.core.handler.FileAsynServiceHandler;
import com.googlecode.asyn4j.service.AsynService;
import com.googlecode.asyn4j.service.AsynServiceImpl;

/**
 * 异步调用
 * @author Administrator
 *
 */
public class Asyn{
	/**
	 * 异步调用
	 * @param clazz 调用类
	 * @param methodName 调用方法
	 * @param args 方法参数
	 * @param callBack 异步回调对象，继承AsynCallBack抽象类
	 */
	public static void asynInvoke(Class<?> clazz, String methodName, Object[] args, AsynCallBack callBack){
		 // 初始化异步工作服务
        AsynService anycService = AsynServiceImpl.getService(300, 3000L, 100, 100,1000);
        //异步工作缓冲处理器
        anycService.setWorkQueueFullHandler(new CacheAsynWorkHandler(100));
        //服务启动和关闭处理器
        anycService.setServiceHandler(new FileAsynServiceHandler());
        //异步工作执行异常处理器
        anycService.setErrorAsynWorkHandler(new DefaultErrorAsynWorkHandler());
        
        // 启动服务
        anycService.init();  
        anycService.addWork(clazz, methodName, args, callBack); 
        anycService.close();
	}
}
